package com.bolingcavalry.crm.serviceorder.controller;/*
 * @Auther:Sadie
 * @Date:2025/4/24
 * @Description:
 * @VERSON:1.8
 */

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.base.PageResult;
import com.base.ResponseResult;
import com.bolingcavalry.crm.serviceorder.service.ServiceOrderService;
import com.dto.ServiceOrderDTO;
import com.vo.ServiceOrderVO;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api("通知单")
@RestController
@RequestMapping("/serviceorder")
@Slf4j
public class ServiceOrderController {
    //技术服务通知单
    //（服务单号、接收时间、客户名称（关联客户公司表）、联系人、服务地点、
    // 技术对接人、工作量核准（交代售后流程关联user表）、预期工作、人员安排（1人*1.5天）
    // 预期更换配件（关联设备表（名称、规格、数量、单价（元）））
    // 确认人员签字/日期）
    @Autowired
    private ServiceOrderService serviceOrderService;
    /**
     * 新建服务单，主要是为了存入数据库
     * @param serviceOrderDTO
     * @return
     */
    @PostMapping("/add")
    public ResponseResult add(@RequestBody ServiceOrderDTO serviceOrderDTO){
        log.info("新增服务单:{}", serviceOrderDTO);
        if(serviceOrderService.add(serviceOrderDTO)){
            return ResponseResult.success("添加服务单成功");
        }
        return ResponseResult.success("添加失败");
    }

    /**
     * 修改服务单（修改时删除中间表的内容重新添加，且要替换本地的excel文件重新生成）
     * @param serviceOrderDTO
     * @return
     */
    @PostMapping("/update")
    public ResponseResult update(@RequestBody ServiceOrderDTO serviceOrderDTO){
        log.info("更新服务单:{}", serviceOrderDTO);
        return serviceOrderService.update(serviceOrderDTO);
    }

    /**
     * 根据id获取服务单
     * @param id
     * @return
     */
    @GetMapping("/get/{id}")
    public ResponseResult<ServiceOrderVO> get(@PathVariable Long id){
        log.info("get服务单:{}", id);
        return ResponseResult.success(serviceOrderService.getById(id));
    }

    /**
     * 根据售后编号获取服务单
     */
    @GetMapping("/getByorderNumber/{orderNumber}")
    public ResponseResult<ServiceOrderVO> getByorderNumber(@PathVariable String orderNumber){
        log.info("get服务单:{}", orderNumber);
        return ResponseResult.success(serviceOrderService.getByorderNumber(orderNumber));
    }

    /**
     * 分页条件查询
     * @param pageNum 1
     * @param pageSize 10
     * @param customerCompany 公司名称
     * @param salesManager 销售经理
     * @param serviceOrderNumber 服务单号
     * @param startDate 服务单号开始时间
     * @param endDate 服务单号结束时间
     * @return
     */
    @GetMapping("/list")
    public ResponseResult<IPage<ServiceOrderVO>> list(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(required = false) Integer pageSize,
            @RequestParam(required = false) String customerCompany,
            @RequestParam(required = false) String salesManager,
            @RequestParam(required = false) String serviceOrderNumber,
            @RequestParam(required = false) String startDate,
            @RequestParam(required = false) String endDate,
            @RequestParam(required = false) String status
    ){
        IPage<ServiceOrderVO> page = serviceOrderService.getByConditions(pageNum, pageSize, customerCompany, salesManager, serviceOrderNumber, startDate, endDate, status);
        PageResult<ServiceOrderVO> result = new PageResult<>();
        result.setTotal(page.getTotal());
        result.setPages((int) page.getPages());
        result.setCurrent((int) page.getCurrent());
        result.setSize((int) page.getSize());
        result.setRecords(page.getRecords());
        return ResponseResult.success("查询成功",result);
    }


    /**
     * 批量删除服务单（逻辑删除，改变is_deleted状态）
     * @param ids
     * @return
     */
    @DeleteMapping ("/batchdelete")
    public ResponseResult batchdelete(@RequestParam List<Long> ids){
        log.info("batch delete service order:{}", ids);
        return serviceOrderService.isbatchDelete(ids);
    }

    /**
     * 修改服务单状态
     * 服务单 编辑-确认-发布（指派人员要做单独的接口吗？可以直接选择处理人员，发布对应的负责人接收到服务单，确认）-处理-完成-归档
     * @param  serviceOrderDTO 服务单
     * @return
     */
    @PostMapping("/updateStatus")
    public ResponseResult updateStatus(@RequestBody ServiceOrderDTO serviceOrderDTO) throws Exception {
        log.info("更新服务单状态:{}", serviceOrderDTO.getId());
        //通过switch 匹配状态，并执行相应的方法
        return serviceOrderService.updateStatus(serviceOrderDTO);
    }

    //打印服务单
//    @PostMapping("/print")
//    public ResponseResult print(@RequestBody String serviceOrderNumber){
//
//    }

}
